import axios from "axios";  // 导入axios库
import CookikService from '@/utils/cookie-service';  // 导入cookie服务工具
import router from '@/router';  // 导入路由实例

// 创建axios实例并配置默认参数
const ApiService = axios.create({
    baseURL: "/dev-api",  // API基础路径
    timeout: 5000,  // 请求超时时间设置为5秒
});

/**
 * 响应拦截器配置
 * 用于统一处理接口响应数据
 */
ApiService.interceptors.response.use(
    (res) => {
        const code = res.data.code;  // 从响应数据中提取状态码
        const msg = res.data.msg;  // 从响应数据中提取消息内容

        // 根据状态码进行不同处理
        if (code === 1000) {
            return Promise.resolve(res.data);  // 请求成功，直接返回数据
        }
        else if (code === 3001) {  // 处理token过期情况
            ElMessage.error('登录状态已过期')  // 显示错误提示
            CookikService.removeToken()  // 清除token
            router.push('/c-oj/login')  // 跳转到登录页
            return Promise.reject(new Error(msg));  // 返回错误信息
        }
        else {  // 处理其他错误情况
            console.error(JSON.stringify(res.data));  // 打印错误日志
            throw new Error(msg);  // 抛出错误
        }
    },
    (error) => {  // 处理网络错误等异常情况
        return Promise.reject(error);  // 返回错误
    }
);

/**
 * 请求拦截器配置
 * 用于在请求发送前统一处理
 */
ApiService.interceptors.request.use(
    (config) => {
        // 获取token并添加到请求头
        const token = CookikService.getToken();
        if (token) {
            config.headers.Authorization = "Bearer " + token;  // 添加Bearer认证头
        }
        return config;  // 返回处理后的配置
    },
    (error) => {  // 处理请求配置错误
        console.error("Request Error:", error);  // 打印错误日志
        return Promise.reject(error);  // 返回错误
    }
);

export default ApiService;  // 导出配置好的axios实例
